const querystring = require("querystring");
const express = require('express')
//引入 fs
const fs = require("fs");
const app = express()
const port = 3000
//引入 moment
const moment = require("moment");
//引入path
const path = require("path");


app.get('/', (req, res) => {

    res.send('/404')
})
//注意：404 的中间件，要放在路由的后面
app.use((req, res, next) => {
    res.status(404).send("/404");
});


//中间件的核心代码
var csBodyParse = (req, res, next) => {
    let data = [];
    req.on("data", (buffer) => {
        data.push(buffer);
    })
    req.on("end", () => {
        let post = querystring.parse(Buffer.concat(data).toString());
        console.log(10);
        console.log(post);
        //将post数据挂载到 body
        req.body = post;

        // - 用户的访问时间（格式：年 - 月 - 日 时: 分: 秒）  moment
        moment().format("YYYY-MM-DD HH:mm:ss");
        let time = moment().format("YYYY-MM-DD HH:mm:ss");
        console.log(time);
        // - 用户的ip地址（格式：IPV4） req.ip
        let ip = req.ip;
        // - 用户的请求方式
        let method = req.method;
        // - 用户的浏览器信息（user - agent）
        let userAgent = req.headers["user-agent"];
        // 将以上信息连接为字符串
        let str = `${time} - ${ip} - ${method} - ${userAgent} \n`;
        // 拼接写入的log文件的路径
        let filename = path.join(__dirname, "logs", moment().format("YYYYMMDD") + ".txt");
        console.log(filename);
        // 写文件
        // appendFile 追加写
        // 参数1：写入的文件路径；参数2：将要写到文件中的内容  
        fs.appendFile(filename, str, err => {
            console.log(err);
        });

        //需要将 next写在 on  end的里面,否则会出错
        next();
    })

    
    //静态服务器   use  使用 中间件
    app.use(express.static("static"));
    app.listen(port, () => console.log(`Example app listening on http://127.0.0.1:3000`))

}

module.exports = csBodyParse;